package com;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;

public class AccessDataFromHBase {

    // 存放连接的配置信息
    public Configuration config;

    /**
     * 在此方法中设置连接的信息
     */
    public void initConfig() {

        // 使用HBaseConfiguration创建一个Hadoop的Configuration的对象
        // 如果未指定，那么配置会扫描当前项目路径下的hbase-site.xml
        config = HBaseConfiguration.create();
        config.set("hbase.zookeeper.quorum", "niit-master");
        config.set("hbase.zookeeper.property.clientPort", "2181");

        // 下面这几个值，更多的是为了调试的时候快速到达timeout超时时间
        config.setInt("hbase.rpc.timeout", 20000);
        config.setInt("hbase.client.operation.timeout", 20000);
        config.setInt("hbase.client.scanner.timeout.period", 20000);
    }

    /**
     * 根据RowKey获取当前行的所有信息
     *
     * @param rowkey
     * @throws IOException
     */
    public void getDataDetailByRowKey(String rowkey) throws IOException {
        // 使用try()创建连接Connection对象，这样，就不用调用close了
        try (
                Connection connection = ConnectionFactory.createConnection(config);
                // 创建Table实例
                Table tlog = connection.getTable(TableName.valueOf("t_log"))
        ) {
            // 创建Get命令的实例
            Get get = new Get(Bytes.toBytes(rowkey));

            // 通过table的get方法，执行get命令
            Result result = tlog.get(get);

            // 遍历查到的当前行的所有列（遍历列自然就能获取到所属的列族）
            byte[] value = result.getValue(
                    Bytes.toBytes("f"),
                    Bytes.toBytes("logContent")
            );
            String strValue = new String(value);
            System.out.println("f:logContent="+ strValue);
        }
    }

    public static void main(String[] args) throws IOException {

        System.out.println("Hi,HBase API!");
        AccessDataFromHBase dataFromHBase = new AccessDataFromHBase();
        dataFromHBase.initConfig();
        dataFromHBase.getDataDetailByRowKey("00000000001");

    }
}
